Coverage tools for checking software provide a measure of how well the software being evaluated has been exercised during testing, and thereby give a level of assurance that the software is of high quality. The tools may also detect and locate faults in the software. In order to check software under test (SUT), a test suite is developed, and each test in the suite is applied to the SUT.
There are a number of types of coverage known in the art, some of the common types being statement (or line) coverage, condition coverage, and path coverage. Tests in a test suite are typically developed according to the type of coverage that is to be measured.
For example, in statement coverage, each test is designed to exercise a number of statements in the SUT, and the measure provided by the test suite is typically a percentage of all the statements in the SUT that were exercised by at least one of the tests in the suite.
The prior art provides a number of different methods which are claimed to improve the efficacy of coverage tools.
U.S. Pat. No. 7,584,455, to Ball describes systems which are claimed to achieve improved test coverage. One system selects a set of predicates, calculates a set of possible predicate values, calculates a subset of the set of possible predicate values, and generates a test for the computer program based at least in part on the subset.
A paper titled “A Theory of Predicate-Complete Test Coverage and Generation,” by Ball, may be found at ftp.research.microsoft.com/pub/tr/TR-2004-28.pdf. The paper describes predicate-complete testing (PCT), and gives as an example a program with m statements and n predicates, the latter being program defined. The size of the set of observable states of the program is at most m×2n. The goal of PCT is to cover all reachable observable states in the program.
U.S. Pat. No. 6,356,858 to Malka, et al., describes a coverage measurement tool enabling a user to create a specific coverage tool for a coverage model. The specific coverage tool is associated with a database and consists of a set of coverage tasks specified by a user for checking a design such as a hardware or software system. The user chooses specific elements to be covered and provides instrumentation for the system.